package com.hxk.ioc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

/**
 * 将对象交由springIOC容器管理的方式一
 *      使用注解扫描的方式将对象加载到IOC容器中
 *      @ComponentScan("要加载类的包路径")
 *          只加载类上标识@Controller、@Service、@Component、@Repository、@Configuration spring注解的对象
 */
//@ComponentScan("com.hxk.ioc")//扫描com.hxk.ioc包下所有标有@Controller、@Service、@Component、@Repository、@Configuration spring注解的对象
/***配置不需要扫描的注解
@ComponentScan(
        value = "com.hxk.ioc",
        //在使用包扫描的方式向IOC容器中加载对象时，配置不需要被扫描的注解
        excludeFilters = @ComponentScan.Filter(
            type = FilterType.ANNOTATION,//用注解排除
            //type = FilterType.REGEX,//用正则表达式排除
            //type = FilterType.ASPECTJ,//使用ASPECTJ表达式
            //type = FilterType.ASSIGNABLE_TYPE,//使用给定的类型判断
            //type = FilterType.CUSTOM,//使用自定义类型，编写一个实现TypeFilter接口的类来完成
            classes = {Controller.class, Service.class}//要排除的注解类
        )
)**/
/***配置只需要扫描的注解
@ComponentScan(
        value = "com.hxk.ioc",
        includeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,//用注解排除
                //type = FilterType.REGEX,//用正则表达式排除
                //type = FilterType.ASPECTJ,//使用ASPECTJ表达式
                //type = FilterType.ASSIGNABLE_TYPE,//使用给定的类型判断
                //type = FilterType.CUSTOM,//使用自定义类型，编写一个实现TypeFilter接口的类来完成
                classes = {Controller.class}//只要扫描的注解类
        ),
        useDefaultFilters = false //使用includeFilters，必须要将此属性设置为false，意为关闭默认的扫描规则，否则不起作用
)***/
/**配置自定义的扫描注解**/
@ComponentScan(
        value = "com.hxk.ioc",
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.CUSTOM,//使用自定义类型，编写一个实现TypeFilter接口的类来完成
                classes = MyTypeFilter.class//实现TypeFilter接口的类
        )
)
@Configuration//告诉Spring这是一个配置类,配置类=配置文件
public class MainConfigComponentScan {

}
